package SecondeStage.YiChang;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.file.FileAlreadyExistsException;

public class Throw {
    public static void main(String[] args) {
        // 如果一个方法可能发生异常，但不知道如何处理异常，则此方法应该显示地声明抛出异常，由该方法的调用者负责处理

    }

    public void f2() throws Exception{
        // 使用throws,抛出异常，让调用f2()方法的调用者（方法）处理
        // throws后面的异常类型可以是方法中产生的异常类型，也可以是它的父类
        // throws 关键字后也可以是异常列表，即可以抛出多个异常

    }

    public static void f1(){
        // 这里为什么会报错
        //f3(); // f3()会抛出编译异常，而f1()方法没有处理异常
        // 此时：1.f1() 也抛出异常：  public static void f1() throws FileNotFoundException
        // 2. f1() 处理异常： try-catch-finally
    }

    public static void f3() throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("");
    }

    public static void f4(){
        // 这里不报错，因为f5()抛出的是运行异常，java中，并不要求程序员显示处理，因为有默认处理机制
        f5();
    }

    public static void f5() throws ArithmeticException{

    }
}

class  father{
    public void method() throws RuntimeException{

    }
}

class son extends father{
    // 子类重写父类方法时，对抛出异常的规定： 子类重写的方法，所抛出的异常类型要么和父类一致，要么为父类抛出异常的类型的子类型
    @Override
    public void method() throws NullPointerException{

    }
}
